#if !defined(ximera_input_messages_hpp)
#define ximera_input_messages_hpp

// -----------------------------------------------------------

#include <ximera/input/idevice.hpp>
#include <ximera/threading/messagequeue.hpp>

namespace ximera { namespace input
{
    class XIMERA_API AxisChangeMessage: public threading::IMessage
    {
    public:
        AxisChangeMessage(IDevice* sender, Byte axisIndex, Real lastValue, Real newValue, Real relValue);

        virtual void process();

    private:
        IDevice* _sender;
        Byte _axisIndex;
        Real _lastValue;
        Real _newValue;
        Real _relValue;
    };

    class XIMERA_API AxisIntChangeMessage: public threading::IMessage
    {
    public:
        AxisIntChangeMessage(IDevice* sender, Byte axisIndex, Int16 lastValue, Int16 newValue, Int16 relValue);

        virtual void process();

    private:
        IDevice* _sender;
        Byte _axisIndex;
        Int16 _lastValue;
        Int16 _newValue;
        Int16 _relValue;
    };

    class XIMERA_API ButtonChangeMessage: public threading::IMessage
    {
    public:
        ButtonChangeMessage(IDevice* sender, Byte buttonIndex, Byte lastValue, Byte newValue, Byte relValue);

        virtual void process();

    private:
        IDevice* _sender;
        Byte _buttonIndex;
        Byte _lastValue;
        Byte _newValue;
        Byte _relValue;
    };

    class XIMERA_API ButtonDownMessage: public threading::IMessage
    {
    public:
        ButtonDownMessage(IDevice* sender, Byte buttonIndex);

        virtual void process();

    private:
        IDevice* _sender;
        Byte _buttonIndex;
    };

    class XIMERA_API ButtonUpMessage: public threading::IMessage
    {
    public:
        ButtonUpMessage(IDevice* sender, Byte buttonIndex);

        virtual void process();

    private:
        IDevice* _sender;
        Byte _buttonIndex;
    };

}}

// -----------------------------------------------------------

#endif